/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.switz.agendacita.controller;

import com.switz.agendacita.dto.Agenda;
import com.switz.agendacita.dto.Usuario;
import com.switz.agendacita.services.iface.AgendaService;
import com.switz.agendacita.utils.EncryptAES;
import java.net.URLDecoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 *
 * @author tey
 */
@Controller
public class AgendaController {

    @Autowired
    @Qualifier("agendaServiceImpl")
    private AgendaService agendaService;

    @RequestMapping(value = "/registrarReservacion", method = RequestMethod.GET)
    @ResponseBody
    public void registrarReservacion(
            @RequestParam("idEmpresa") String idEmpresa,
            @RequestParam("idServicio") String idServicio,
            @RequestParam("idPersonal") String idPersonal,
            @RequestParam("fecha") String fecha,
            @RequestParam("horaInicio") String horaInicio,
            @RequestParam("horaFin") String horaFin,
            @RequestParam("nombre") String nombre,
            @RequestParam("telefono") String telefono,
            @RequestParam("movil") String movil,
            @RequestParam("mail") String mail,
            @RequestParam("psw") String psw,
            HttpSession session) throws ParseException {

        Usuario usuarioSession = (Usuario) session.getAttribute("usuario");

        //Verificamos si existe en session un usuario
        if (usuarioSession == null) {
            usuarioSession = new Usuario();
            usuarioSession.setNombre(nombre);
            usuarioSession.setTelefono(telefono);
            usuarioSession.setMovil(movil);
            usuarioSession.setMail(mail);
            usuarioSession.setPsw(psw);
        }



        int[] tipoAlarma = {12, 13};

        int anio, mes, dia;
        StringTokenizer tokens = new StringTokenizer(fecha, "-");
        anio = Integer.parseInt(tokens.nextToken());
        mes = Integer.parseInt(tokens.nextToken());
        dia = Integer.parseInt(tokens.nextToken());

        Date hoy = new Date();
        java.sql.Time fecTimeIn = null;
        java.sql.Time fecTimefin = null;
        SimpleDateFormat d = new java.text.SimpleDateFormat("hh:mm:ss");
        fecTimeIn = new java.sql.Time(d.parse(horaInicio).getTime());
        fecTimefin = new java.sql.Time(d.parse(horaFin).getTime());

        java.sql.Date dateSQL = new java.sql.Date(hoy.getTime());

        dateSQL.setYear(anio - 1900);
        dateSQL.setMonth(mes - 1);
        dateSQL.setDate(dia);

        Agenda agenda = new Agenda(idEmpresa, idServicio, idPersonal, dateSQL, fecTimeIn, fecTimefin);
        agendaService.registrarReservacionTXT(agenda, usuarioSession, tipoAlarma);


    }

    @RequestMapping(value = "/modificarReservacion", method = RequestMethod.GET)
    @ResponseBody
    public void modificarReservacion(
            @RequestParam("idReservacion") String idReservacion,
            @RequestParam("idEmpresa") String idEmpresa,
            @RequestParam("idServicio") String idServicio,
            @RequestParam("idPersonal") String idPersonal,
            @RequestParam("fecha") String fecha,
            @RequestParam("horaInicio") String horaInicio,
            @RequestParam("horaFin") String horaFin,
            @RequestParam("nombre") String nombre,
            @RequestParam("telefono") String telefono,
            @RequestParam("movil") String movil,
            @RequestParam("mail") String mail,
            @RequestParam("psw") String psw) throws ParseException {

        Usuario usuario = new Usuario();
        usuario.setNombre(nombre);
        usuario.setTelefono(telefono);
        usuario.setMovil(movil);
        usuario.setMail(mail);
        usuario.setPsw(psw);


        int[] tipoAlarma = {9, 10};

        int anio, mes, dia;
        StringTokenizer tokens = new StringTokenizer(fecha, "-");
        anio = Integer.parseInt(tokens.nextToken());
        mes = Integer.parseInt(tokens.nextToken());
        dia = Integer.parseInt(tokens.nextToken());

        Date hoy = new Date();
        java.sql.Time fecTimeIn = null;
        java.sql.Time fecTimefin = null;
        SimpleDateFormat d = new java.text.SimpleDateFormat("hh:mm:ss");
        fecTimeIn = new java.sql.Time(d.parse(horaInicio).getTime());
        fecTimefin = new java.sql.Time(d.parse(horaFin).getTime());

        java.sql.Date dateSQL = new java.sql.Date(hoy.getTime());

        dateSQL.setYear(anio - 1900);
        dateSQL.setMonth(mes - 1);
        dateSQL.setDate(dia);

        Agenda agenda = new Agenda(idEmpresa, idServicio, idPersonal, dateSQL, fecTimeIn, fecTimefin);
        agendaService.modificarReservacionTXT(agenda, usuario, tipoAlarma, idReservacion);


    }

    @RequestMapping(value = "confirmarReservacion")
    public String confirmarReservacion(@RequestParam("idAgenda") String idAgenda) {



        // System.out.println("id  como viene de la url " + idAgenda);
        EncryptAES e = new EncryptAES();
        String idDesencriptado = null;
        try {
            idDesencriptado = e.decrypt(idAgenda);
            //  System.out.println("id desicriptado " + idDesincriptado);
        } catch (Exception ex) {
            Logger.getLogger(UsuarioController.class.getName()).log(Level.SEVERE, null, ex);
        }

        Agenda ag = agendaService.obtenerAgenda(URLDecoder.decode(idDesencriptado));



        if (ag != null) {
            agendaService.actualizarStatusAgenda(idDesencriptado);


            return "usuarioAdmin";
        } else {
            return "failed";
        }


    }
}
